﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
using Csla.Tools;
using Csla.Data;
using System.Data;
using DemoCSLA.DalLinq;

namespace DemoCSLA.Libreria.SoloLectura
{

    //******************************************
    //Clase generada por un Snippet de Erick Orlando © 2010
    //******************************************


    [Serializable()]
    public class FacturaCabeceraInfoList : ReadOnlyListBase<FacturaCabeceraInfoList, FacturaCabeceraInfo>
    {
        #region Métodos de instanciación

        private FacturaCabeceraInfoList()
        { }

        public static FacturaCabeceraInfoList GetFacturaCabeceraInfoList()
        {
            //Sin Filtros
            return DataPortal.Fetch<FacturaCabeceraInfoList>(new FiltroCriteria());
        }

        /// <summary>
        /// Funcion que permite filtrar los Objetos InfoList basados en 
        /// Varios parámetros
        /// </summary>
        public static FacturaCabeceraInfoList GetFacturaCabeceraInfoList(ICriterio Criterio)
        {
            return DataPortal.Fetch<FacturaCabeceraInfoList>(Criterio);
        }

        #endregion // Métodos de instanciación

        #region Criterios

        [Serializable()]
        public class FiltroCriteria : ICriterio
        {
            public FiltroCriteria()
            {
                //Sin Filtros
            }

            public string Cliente { get; set; }
            public int Numero { get; set; }
            //Si necesita mas filtros agruegelos aqui

            String ICriterio.NombreClaseCriterio
            {
                get { return this.GetType().Name; }
            }

        }

        #endregion //Criterios

        #region Data Access

        #region Data Access - Fetch

        private void DataPortal_Fetch(FiltroCriteria crit)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;

            using (var ctx = ContextManager<DemoCSLADataContext>
                .GetManager(Contexto.DemoCSLA))
            {
                IQueryable<Factura> q = null;

                if (!String.IsNullOrEmpty(crit.Cliente))
                    q = Factura.GetFacturaByCliente(ctx.DataContext, crit.Cliente);
                else if (crit.Numero > 0)
                    q = Factura.GetFacturaByNumero(ctx.DataContext, crit.Numero);
                else
                    q = Factura.GetAllFacturas(ctx.DataContext);

                foreach (var item in q)
                {
                    base.Add(FacturaCabeceraInfo.GetFacturaCabeceraInfo(item));
                }
            }

            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion // Data Access - Fetch

        #endregion // Data Access



    }

}
